/**
 * module对象
 * 在每个 .js自定义模块中都有一个module对象, 它里面存储了和当前模块有关的信息
 *
 * {
    "id": ".",
    "path": "D:\\WebstormProjects\\js-learn\\node",
    "exports": {},
    "parent": null,
    "filename": "D:\\WebstormProjects\\js-learn\\node\\07_module对象.js",
    "loaded": false,
    "children": [],
    "paths": [
        "D:\\WebstormProjects\\js-learn\\node\\node_modules",
        "D:\\WebstormProjects\\js-learn\\node_modules",
        "D:\\WebstormProjects\\node_modules",
        "D:\\node_modules"
    ]
 * }
 */

// console.log(module)

const llhuang10 = 'llhuang10';


/**
 * module.exports对象
 * 在自定义模块中, 可以使用 module.exports 对象, 将模块内的成员共享出去, 供外界使用
 * 外界使用 require()方法导入自定义模块时, 得到的就是 module.exports 所指向的对象
 * #
 * exports对象
 * 由于module.exports单词写起来比较复杂, 为了简化向外共享成员的代码, Node提供了 exports对象
 * 默认情况下, exports 和 module.exports 指向同一个对象.
 * ----- 最终共享的结果, 还是以 module.exports 执行的对象为准 -----
 */

// exports === module.exports: true
console.log(`exports === module.exports: ${exports === module.exports}`)

// 在一个自定义模块中, 默认情况下 module.exports = {},
// 注意 exports 是一个对象, 可以为它动态的添加方法和属性


// 向 module.exports 对象上挂载 username 属性
module.exports.username = 'zs';

// 向 module.exports 对象上挂载 sayHello 方法
module.exports.sayHello = function () {
  console.log('hello everyone')
};
// { username: 'zs', sayHello: [Function (anonymous)] }
console.log(module.exports)


// 这个把 module.exports 对象的指针改变了, 指向了 llhuang10 的指针
// module.exports = llhuang10;
// console.log(module.exports)  // llhuang10

// 让 module.exports 指向了一个全新的对象
exports = {
  nickname: '小黑',
  sayHi() {
    console.log('HI')
  }
}
